package _11_整理题目._整理基础._nio;

import org.junit.Test;

import java.nio.IntBuffer;

/**
 * NIO : New IO 基于多路复用io模型，使用 Selector Channel Buffer 三个核心组件
 *      Selector 任务是实现多路复用，主要的工作是 通道的注册、监听 和 事件查询
 *      Channel 通过对不同的数据传输协议建立不同的 通路，常用的四种通道：FileChannel、SocketChannel、ServerSocketChannel、DatagramChannel。
 *      Buffer  本质上一块连续内存空间数组，通过一些方法使得对它的操作比数组高效，常用的八种缓存类型：
 *
 *      Selector 和 Channel 的关系：监听与被监听的关系
 *      Channel 和 Buffer 的关系：数据总是从通道读入缓存 或者 从缓存写入通道
 *
 * OIO : Old IO 基于阻塞io模型，使用 字节流 和 字符流
 *
 *
 * 常用属性：position  limit  capacity  mark
 * 常用方法：allocate  put  flip  get  clear  compact  mark  reset
 *
 */
public class _Nio {

    @Test
    public void TestIntBuffer() {
        IntBuffer intBuffer = IntBuffer.allocate(10);
        System.out.println("intBuffer.position() = " + intBuffer.position());
        System.out.println("intBuffer.limit() = " + intBuffer.limit());
        System.out.println("intBuffer.capacity() = " + intBuffer.capacity());

        intBuffer.put(11);
        intBuffer.put(22);
        intBuffer.put(33);
        System.out.println("intBuffer.position() = " + intBuffer.position());
        System.out.println("intBuffer.limit() = " + intBuffer.limit());
        System.out.println("intBuffer.capacity() = " + intBuffer.capacity());

        intBuffer.flip();
        System.out.println("intBuffer.position() = " + intBuffer.position());
        System.out.println("intBuffer.limit() = " + intBuffer.limit());
        System.out.println("intBuffer.capacity() = " + intBuffer.capacity());

        int a = intBuffer.get();
        System.out.println("a = " + a);
        System.out.println("intBuffer.position() = " + intBuffer.position());
        System.out.println("intBuffer.limit() = " + intBuffer.limit());
        System.out.println("intBuffer.capacity() = " + intBuffer.capacity());
    }
}
